/**
 * 通用js方法封装处理
 * Copyright (c) 2019 ruoyi
 */
import LuckyExcel from "luckyexcel";

// 从url字符串中提取url文件扩展名
export function get_url_extension(url) {
	return url.split(/[#?]/)[0].split('.').pop().trim();
}

export function asynLoad(src, isCss = false) {
  return new Promise(res => {
    let el;
    if (isCss) {
      el = document.createElement('link');
      el.rel = 'stylesheet';
      el.href = src;
    } else {
      el = document.createElement('script');
      el.src = src;
    }
    document.documentElement.appendChild(el);
    el.onload = el.onreadystatechange = function() {
      if (
        !this.readyState ||
        this.readyState == 'loaded' ||
        this.readyState == 'complete'
      ) {
        res(true);
      }
      this.onload = this.onreadystatechange = null;
    };
  });
}

/**
 * 随机生成数字
 *
 * 示例：生成长度为 12 的随机数：randomNumber(12)
 * 示例：生成 3~23 之间的随机数：randomNumber(3, 23)
 *
 * @param1 最小值 | 长度
 * @param2 最大值
 * @return int 生成后的数字
 */
export function randomNumber() {
  // 生成 最小值 到 最大值 区间的随机数
  const random = (min, max) => {
    return Math.floor(Math.random() * (max - min + 1) + min)
  }
  if (arguments.length === 1) {
    let [length] = arguments
    // 生成指定长度的随机数字，首位一定不是 0
    let nums = [...Array(length).keys()].map((i) => (i > 0 ? random(0, 9) : random(1, 9)))
    return parseInt(nums.join(''))
  } else if (arguments.length >= 2) {
    let [min, max] = arguments
    return random(min, max)
  } else {
    return Number.NaN
  }
}

/**
 * 随机生成字符串
 * @param length 字符串的长度
 * @param chats 可选字符串区间（只会生成传入的字符串中的字符）
 * @return string 生成的字符串
 */
export function randomString(length, chats) {
  if (!length) length = 1
  if (!chats) chats = '0123456789qwertyuioplkjhgfdsazxcvbnm'
  let str = ''
  for (let i = 0; i < length; i++) {
    let num = randomNumber(0, chats.length - 1)
    str += chats[num]
  }
  return str
}

/**
 * 数组相减的方法
 * @param {Array} a
 * @param {Array} b
 */
export function arrSubtraction(a, b) {
  if (Array.isArray(a) && Array.isArray(b)) {
    return a.filter((i) => !b.includes(i));
  }
  throw new new TypeError("arguments must be array")();
}


/**
 * @param arr 如：var arr = [{name: "123", age : 123}, {name:"1234432", age : 1234324}]
 * @param key 如："name"
 *
 * @retutns boolean: false：不存在； true：存在重复
 **/
export function isRepeat(arr, key) {
  var obj = {};
  for (let i = 0; i < arr.length; i ++) {
     if (obj[arr[i][key]]) {
         return true;    // 存在
     } else {
       obj[arr[i][key]] = arr[i];
     }
  }
   return false;
}

export function elFormErrorScrollIntoView() { 
  // 获取第一个校验错误的元素 
  const element = document.querySelectorAll('.el-form-item__error')[0] 
  // 滚动到错误元素对应位置 
  element.scrollIntoView({ 
    behavior: 'smooth', 
    block: 'center' 
  }) 
}